<template>
    <div>

    </div>
</template>
<!-- 声明 使用typescript语法 -->
<script setup lang="ts">
/* 
    声明变量  变量名称:变量类型 = 变量值
    
    给变量赋值
    变量名称 = 赋予值(必须是上面的变量类型);
*/
// let num:number = 2;
// console.log(num);
// num = 1;
/* 
    在vue 没有开启严格模式eslint的情况下，任何的js代码，都可以在ts语法当中使用；
    因为，ts也是基于js运行的;
*/
// 基本数据类型 定义的方式
// Number,String,Boolean,null,undefined,Symbol;
// let bool:boolean = true;
// console.log(bool);

// 数组定义
// 价格的数组  里面必须是数字
// 当前变量 必须是一个数组 数组里面的参数 必须全是数字
// let array:number[] = [1,9,3];

// 数组里面可能包含字符串和数字两种i情况 泛型
/* 
    array 是一个数组类型  数组里面可能包含 number数据类型  string数据类型
*/
// let array:Array<number | string | null | undefined | boolean | Symbol> = [1,'2',3,null,undefined,true,Symbol('abc')]
/* 
    any 是ts的类型特点，
    指的是，当前数据类型有可能是所有的数据类型情况;
*/
// let array:Array<any> = [1,'2',3,null,undefined,true,Symbol('abc')]
// 多维数组
// let array:Array<any> = [1,2,3,4,56];

/* 
    Object  数据类型 表示对象
    ts 表示 除了基本数据类型之外的值

    但是，对象里面的名字，是没办法直接调用

    需要给对象里面的名字 设置数据类型
    
    使用枚举，定义相应的类型参数
*/
// interface List {
//     data: any
// }
// let array:Array<List> = [
//     {
//         name: '李大少爷',
//         age: 68
//     }
// ]
// console.log(array[0].name);

// let array:Array<{
//     name: String,
//     age: number
// }> = [
//     {
//         name: '李大少爷',
//         age: 68
//     }
// ]

// let object:List = {
//     name: '刘大少爷',
//     age: 68
// }
// console.log(object.name);

// let array:Object = {};

let data = {
    data: {
        data: {
            data: {
                data: {
                    data: {
                        data: {
                            data: {
                                data: {
                                    data: {
                                        data: {
                                            data: {
                                                data: {
                                                    data: {
                                                        data: {
                                                            data: {
                                                                name: 'abc'
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

interface Datas{
    data: {
        data: any
    }
}

// 定义函数 递归 查找最后一级data对象
function findData(obj:Datas){
    // 什么情况下不断调用自身
    // 当 传入的值中的data 为undefined的时候  证明 当前对象 就是最后一个没有 data数据的对象
    if(obj.data === undefined){
        return obj
    }else{
        // 否则 调用自身 把 下一级data对象传入
        return findData(obj.data)
    }
}

console.log(findData(data));
</script>
<style></style>